from django.contrib import admin

from .models import Book, BookInstance, Author, Genre


# 行内编辑关联字段  # TabularInline 水平 # 垂直 StackedInline
class BooksInstanceInline(admin.TabularInline):
    model = BookInstance
    extra = 1  # 控制显示已经关联的字段个数


# 改变模型在管理后台页面的显示方式
@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
    list_display = ('title', 'display_authors')  # 元组元素也可以是函数
    # 书下面有多个书的副本，可以添加新的书籍租借信息
    inlines = (BooksInstanceInline,)


@admin.register(BookInstance)
class BookInstanceAdmin(admin.ModelAdmin):
    # 筛选列表
    list_display = ('book', 'status', 'due_back', 'borrower', 'due_back', 'id')
    list_filter = ('status', 'due_back')

    # 分组显示字段
    fieldsets = (
        # 和书本信息相关  None表示没有标题
        (None, {'fields': ('book', 'imprint', 'id')}),
        # 是否可用相关
        ('Availability', {'fields': ('status', 'due_back')})
    )


@admin.register(Author)
class AuthorAdmin(admin.ModelAdmin):
    list_display = ('__str__', 'date_of_birth', 'date_of_death')
    # 定义表单页面显示的字段和显示方式 - 出生和死亡日期水平显示
    fields = ('first_name', 'last_name', ('date_of_birth', 'date_of_death'))


admin.site.register(Genre)
